package com.bbva.gptf.dto.servicio.simulacion;

import java.math.BigDecimal;
import java.util.List;

import com.bbva.gptf.dto.bean.InstrumentosSimulacion;
import com.bbva.gptf.dto.bean.Integracion;
import com.bbva.gptf.dto.bean.PlazoSimulacion;
import com.bbva.gptf.dto.bean.Validacion;
import com.bbva.jee.arq.spring.core.httpService.HttpClient;

/**
 * Servicios que gestionan los procesos de la simulacion.
 * 
 * @author jcompean
 * @version 1.0
 * @created Feb 4, 2013 10:40:50 AM
 */
@HttpClient(serviceName = "servicioSimulacionHttp")
public interface ServicioSimulacion {

	/**
	 * @author iavilalo
	 * @param lista List
	 * @param tipoMercado String
	 * @param tipoBusqueda String
	 * @param valor BigDecimal
	 * @param tipoPosicion Long 
	 * @return List
	 */
	public List<InstrumentosSimulacion> obtienePosicion(List<InstrumentosSimulacion> lista,
			String tipoMercado, String tipoBusqueda, BigDecimal valor, Long tipoPosicion,
			String cdBancomer);

	/**
	 * @author iavilalo
	 * @param tipoValor String
	 * @param emisora String
	 * @return List
	 */
	public List<PlazoSimulacion> obtienePlazos(String tipoValor, String emisora);

	/**
	 * @author iavilalo
	 * @param tipoMercado String
	 * @param tipoValor String
	 * @param emisora String
	 * @param serie String
	 * @param plazoMin Integer
	 * @param plazoMax Integer
	 * @return List
	 */
	public List<Integracion> obtieneInstrumentos(String tipoMercado, String tipoValor,
			String emisora, String serie, Integer plazoMin, Integer plazoMax);

	/**
	 * @author iavilalo
	 * @param listaPosicion List
	 * @param listaIntegracion List
	 * @param tipoOperacion String
	 * @return List
	 */
	public List<Integracion> obtieneMontos(List<InstrumentosSimulacion> listaPosicion,
			List<Integracion> listaIntegracion, String tipoOperacion);

	/**
	 * @author iavilalo
	 * @param listaPosicion List
	 * @param listaIntegracion List
	 * @param tipoOperacion String
	 * @param tipoMercado String
	 * @return List
	 */
	public List<InstrumentosSimulacion> integrar(List<InstrumentosSimulacion> listaPosicion,
			List<Integracion> listaIntegracion, String tipoOperacion, Long tipoConsulta, String tipoMercado);

	/**
	 * @author iavilalo
	 * @param listaPosicion List
	 * @return List
	 */
	public List<InstrumentosSimulacion> recalculo(List<InstrumentosSimulacion> listaPosicion,
			Long tipoConsulta, Boolean titulosOperar);

	/**
	 * @author iavilalo
	 * @param listaPosicion List
	 * @param tipoMercado String
	 * @return List
	 */
	public List<Validacion> obtieneRestricciones(List<InstrumentosSimulacion> listaPosicion,
			String tipoMercado);

	/**
	 * @author iavilalo
	 * @param listaPosiciones List
	 * @param restriccion Boolean
	 * @param cdGestor BigDecimal
	 * @param cdUsuario String
	 * @return boolean
	 */
	public boolean generarOrdenes(List<InstrumentosSimulacion> listaPosiciones,
			boolean restriccion, BigDecimal cdGestor, String cdUsuario);

	/**
	 * @author iavilalo
	 * @param listaOrdenes List
	 * @param cdGestor BigDecimal
	 * @param cdUsuario String
	 * @return boolean 
	 */
	public boolean generarOrdenesLayout(List<InstrumentosSimulacion> listaOrdenes,
			BigDecimal cdGestor, String cdUsuario);

}
